﻿using ExcellentProjectPlus.Dominio.Cuestionarios.Entidades;
using ExcellentProjectPlus.Dominio.Cuestionarios.Servicios.Cuestionarios;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Transactions;
using ExcellentProjectPlus.Aplicacion.Cuestionarios;

namespace ExcellentProjectPlus.Aplicacion.Cuestionarios.Cuestionarios
{
    public class ServicioDeGestionDeCuestionarios : IServicioDeGestionDeCuestionarios
    {
        #region Propiedades        
        IServicioDeAdministracionDeCuestionarios _servicioDeAdministracionDeCuestionarios;
        #endregion

        #region Constructores
        public ServicioDeGestionDeCuestionarios( IServicioDeAdministracionDeCuestionarios servicioDeAdministracionDeCuestionarios)
        {           
            _servicioDeAdministracionDeCuestionarios = servicioDeAdministracionDeCuestionarios;
        }
        #endregion

        public IEnumerable<Cuestionario> ObtenerCuestionarios()
        {
            IEnumerable<Cuestionario> resultado = null;
            var trxOptions = new TransactionOptions();
            trxOptions.IsolationLevel = IsolationLevel.ReadUncommitted;
            trxOptions.Timeout = TimeSpan.FromMinutes(2);
            using (var transaccion = new TransactionScope(TransactionScopeOption.RequiresNew, trxOptions))
            {
                resultado = _servicioDeAdministracionDeCuestionarios.ObtenerCuestionarios();
                transaccion.Complete();
            }
            return resultado;
        }

        public Cuestionario ObtenerCuestionarioPorId(int id)
        {
            Cuestionario resultado = null;
            var trxOptions = new TransactionOptions();
            //Lectura con nivel de aislamiento ReadUncommited para evitar bloqueos en la base
            trxOptions.IsolationLevel = IsolationLevel.ReadCommitted;
            trxOptions.Timeout = TimeSpan.FromMinutes(2);
            using (var transaccion = new TransactionScope(TransactionScopeOption.RequiresNew, trxOptions))
            {
                resultado = _servicioDeAdministracionDeCuestionarios.ObtenerCuestionarioPorId(id);
                transaccion.Complete();
            }

            return resultado;
        }

        public void AgregarCuestionario(Cuestionario cuestionario)
        {
            _servicioDeAdministracionDeCuestionarios.Agregar(cuestionario);
        }

        public void ModificarCuestionario(Cuestionario cuestionario)
        {
            _servicioDeAdministracionDeCuestionarios.Modificar(cuestionario);
        }

        public void EliminarCuestionario(Cuestionario cuestionario)
        {
            _servicioDeAdministracionDeCuestionarios.Eliminar(cuestionario);
        }

    }
}
 